function gen_framebuffer(gl, buffer_width, buffer_height) {
    //用于HDR的帧缓冲
    let FBO = gl.createFramebuffer();
    let TEXTURE = gl.createTexture();
    //FBO_hdr[i] = gl.createFramebuffer();
    //tex_hdr[i] = gl.createTexture();
    //纹理
    gl.bindTexture(gl.TEXTURE_2D, TEXTURE);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, buffer_width, buffer_height, 0, gl.RGBA, gl.FLOAT, null);//*********************
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    //深度缓冲
    let dep_hdr = gl.createRenderbuffer();
    gl.bindRenderbuffer(gl.RENDERBUFFER, dep_hdr);
    gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, buffer_width, buffer_height);

    gl.bindFramebuffer(gl.FRAMEBUFFER, FBO);
    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, TEXTURE, 0);
    gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, dep_hdr);
    if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
        alert("Framebuffer not complete!");
    }

    return [FBO, TEXTURE];
}